<?php
/**
 * User: zoudingyong <sheyingtg@qq.com>
 * Date: 2017/12/13
 */
namespace org;
class Express {

    /**
     * 	快递单当前的状态 ：　
        0：在途，即货物处于运输过程中；
        1：揽件，货物已由快递公司揽收并且产生了第一条跟踪信息；
        2：疑难，货物寄送过程出了问题；
        3：签收，收件人已签收；
        4：退签，即货物由于用户拒签、超区等原因退回，而且发件人已经签收；
        5：派件，即快递正在进行同城派件；
        6：退回，货物正处于退回发件人的途中；
    */
    public static $error_msg =
        [
            '0' => '在途中',
            '1' => '已揽件',
            '3' => '已签收',
            '2' => '疑难件',
            '4' => '退签',
            '5' => '派件中',
            '6' => '已退回',
        ];
    /**
     * 网页内容获取
     * @param $url
     * @return bool|mixed|string
     */
    private static function getContent($url)
    {
        if (function_exists("file_get_contents")) {
            $file_contents = file_get_contents($url);
        } else {
            $ch      = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $file_contents = curl_exec($ch);
            curl_close($ch);
        }
        return $file_contents;
    }
    /**
     * 根据单号获取快递公司英文名称
     * @param $no
     * @return bool
     */
    public static function expressName($no)
    {
        $name   = json_decode(self::getContent("http://www.kuaidi100.com/autonumber/auto?num={$no}"), true);
        $result = $name[0]['comCode'];
        if (empty($result)) {
            return false;
        } else {
            return $result;
        }
    }

    /**
     *  根据单号模糊获取物流信息
     * @param $no
     * @return bool|mixed
     */
    public static function getInfoByExpressNo($no)
    {
        $keywords = self::expressName($no);
        if (!$keywords) {
            return false;
        } else {
            $result = self::getContent("http://www.kuaidi100.com/query?type={$keywords}&postid={$no}");
            $data   = json_decode($result, true);
            return $data;
        }
    }

    /**
     *  根据快递公司简称和单号获取物流信息
        $data['status']查询结果状态：
        201：物流单暂无结果，
        200：查询成功，
        202：接口出现异常，
     * @param $name
     * @param $no
     * @return mixed
     */
    public static function getInfo($name, $no)
    {
        $result = self::getContent("http://www.kuaidi100.com/query?type={$name}&postid={$no}");
        $result = json_decode($result, true);
        cache('kuaidi_' . $name . '_' . $no ,$result,3600);//存储缓存
        $result = cache('kuaidi_' . $name . '_' . $no);//获取缓存
        return $result;
    }

}
